package com.changanw.middleware.rpc.network.client;


import com.changanw.middleware.rpc.network.future.SyncWriteFuture;
import com.changanw.middleware.rpc.network.future.SyncWriteMap;
import com.changanw.middleware.rpc.network.msg.Response;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
 *channelRead，是用于读取在 JDKInvocationHandler 中向接口提供方发起的请求后，得到的反馈信息。
 * 这里的反馈信息处理会经过 SyncWriteMap.syncKey.get(requestId); 的方式进行获取。
 * 其实这是一种比较简单的实现方式，也是比较耗费性能的地方。
 */
public class MyClientHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object obj) throws Exception {
        Response msg = (Response) obj;
        String requestId = msg.getRequestId();
        SyncWriteFuture future = (SyncWriteFuture) SyncWriteMap.syncKey.get(requestId);
        if (future != null) {
            future.setResponse(msg);
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        cause.printStackTrace();
        ctx.close();
    }

}
